//===- X86ManualCompressEVEXTables.def ---------------------------*- C++ -*-==//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// \file
// This file defines all the entries in X86 EVEX compression tables that need
// special handling.
//===----------------------------------------------------------------------===//

#ifndef NOCOMP
#define NOCOMP(INSN)
#endif
NOCOMP(VCVTQQ2PDZ128rr)
NOCOMP(VCVTQQ2PSZ128rm)
NOCOMP(VCVTQQ2PSZ128rr)
NOCOMP(VDBPSADBWZ128rmi)
NOCOMP(VDBPSADBWZ128rri)
NOCOMP(VPMAXSQZ128rm)
NOCOMP(VPMAXSQZ128rr)
NOCOMP(VPMAXUQZ128rm)
NOCOMP(VPMAXUQZ128rr)
NOCOMP(VPMINSQZ128rm)
NOCOMP(VPMINSQZ128rr)
NOCOMP(VPMINUQZ128rm)
NOCOMP(VPMINUQZ128rr)
NOCOMP(VPMULLQZ128rm)
NOCOMP(VPMULLQZ128rr)
NOCOMP(VPSRAQZ128ri)
NOCOMP(VPSRAQZ128rm)
NOCOMP(VPSRAQZ128rr)
NOCOMP(VSCALEFPSZ128rm)
NOCOMP(VDBPSADBWZ256rmi)
NOCOMP(VDBPSADBWZ256rri)
NOCOMP(VPMAXSQZ256rm)
NOCOMP(VPMAXSQZ256rr)
NOCOMP(VPMAXUQZ256rm)
NOCOMP(VPMAXUQZ256rr)
NOCOMP(VPMINSQZ256rm)
NOCOMP(VPMINSQZ256rr)
NOCOMP(VPMINUQZ256rm)
NOCOMP(VPMINUQZ256rr)
NOCOMP(VPMULLQZ256rm)
NOCOMP(VPMULLQZ256rr)
NOCOMP(VPSRAQZ256ri)
NOCOMP(VPSRAQZ256rm)
NOCOMP(VPSRAQZ256rr)
NOCOMP(VSCALEFPSZ256rm)
#undef NOCOMP

#ifndef ENTRY
#define ENTRY(OLD, NEW)
#endif
ENTRY(VALIGNDZ128rmi, VPALIGNRrmi)
ENTRY(VALIGNDZ128rri, VPALIGNRrri)
ENTRY(VALIGNQZ128rmi, VPALIGNRrmi)
ENTRY(VALIGNQZ128rri, VPALIGNRrri)
ENTRY(VMAXSDZrm, VMAXSDrm)
ENTRY(VMAXSDZrr, VMAXSDrr)
ENTRY(VMAXSSZrm, VMAXSSrm)
ENTRY(VMAXSSZrr, VMAXSSrr)
ENTRY(VMINSDZrm, VMINSDrm)
ENTRY(VMINSDZrr, VMINSDrr)
ENTRY(VMINSSZrm, VMINSSrm)
ENTRY(VMINSSZrr, VMINSSrr)
ENTRY(VMOVDQU16Z128mr, VMOVDQUmr)
ENTRY(VMOVDQU16Z128rm, VMOVDQUrm)
ENTRY(VMOVDQU16Z128rr, VMOVDQUrr)
ENTRY(VMOVDQU8Z128mr, VMOVDQUmr)
ENTRY(VMOVDQU8Z128rm, VMOVDQUrm)
ENTRY(VMOVDQU8Z128rr, VMOVDQUrr)
ENTRY(VMOVDQU16Z256mr, VMOVDQUYmr)
ENTRY(VMOVDQU16Z256rm, VMOVDQUYrm)
ENTRY(VMOVDQU16Z256rr, VMOVDQUYrr)
ENTRY(VMOVDQU8Z256mr, VMOVDQUYmr)
ENTRY(VMOVDQU8Z256rm, VMOVDQUYrm)
ENTRY(VMOVDQU8Z256rr, VMOVDQUYrr)
ENTRY(VSHUFF32X4Z256rmi, VPERM2F128rm)
ENTRY(VSHUFF32X4Z256rri, VPERM2F128rr)
ENTRY(VSHUFF64X2Z256rmi, VPERM2F128rm)
ENTRY(VSHUFF64X2Z256rri, VPERM2F128rr)
ENTRY(VSHUFI32X4Z256rmi, VPERM2I128rm)
ENTRY(VSHUFI32X4Z256rri, VPERM2I128rr)
ENTRY(VSHUFI64X2Z256rmi, VPERM2I128rm)
ENTRY(VSHUFI64X2Z256rri, VPERM2I128rr)
// W bit does not match
ENTRY(VADDPDZ128rm, VADDPDrm)
ENTRY(VADDPDZ128rr, VADDPDrr)
ENTRY(VADDSDZrm, VADDSDrm)
ENTRY(VADDSDZrm_Int, VADDSDrm_Int)
ENTRY(VADDSDZrr, VADDSDrr)
ENTRY(VADDSDZrr_Int, VADDSDrr_Int)
ENTRY(VANDNPDZ128rm, VANDNPDrm)
ENTRY(VANDNPDZ128rr, VANDNPDrr)
ENTRY(VANDPDZ128rm, VANDPDrm)
ENTRY(VANDPDZ128rr, VANDPDrr)
ENTRY(VCOMISDZrm, VCOMISDrm)
ENTRY(VCOMISDZrm_Int, VCOMISDrm_Int)
ENTRY(VCOMISDZrr, VCOMISDrr)
ENTRY(VCOMISDZrr_Int, VCOMISDrr_Int)
ENTRY(VCVTPD2DQZ128rm, VCVTPD2DQrm)
ENTRY(VCVTPD2DQZ128rr, VCVTPD2DQrr)
ENTRY(VCVTPD2PSZ128rm, VCVTPD2PSrm)
ENTRY(VCVTPD2PSZ128rr, VCVTPD2PSrr)
ENTRY(VCVTSD2SSZrm, VCVTSD2SSrm)
ENTRY(VCVTSD2SSZrm_Int, VCVTSD2SSrm_Int)
ENTRY(VCVTSD2SSZrr, VCVTSD2SSrr)
ENTRY(VCVTSD2SSZrr_Int, VCVTSD2SSrr_Int)
ENTRY(VCVTTPD2DQZ128rm, VCVTTPD2DQrm)
ENTRY(VCVTTPD2DQZ128rr, VCVTTPD2DQrr)
ENTRY(VDIVPDZ128rm, VDIVPDrm)
ENTRY(VDIVPDZ128rr, VDIVPDrr)
ENTRY(VDIVSDZrm, VDIVSDrm)
ENTRY(VDIVSDZrm_Int, VDIVSDrm_Int)
ENTRY(VDIVSDZrr, VDIVSDrr)
ENTRY(VDIVSDZrr_Int, VDIVSDrr_Int)
ENTRY(VMAXCPDZ128rm, VMAXCPDrm)
ENTRY(VMAXCPDZ128rr, VMAXCPDrr)
ENTRY(VMAXCSDZrm, VMAXCSDrm)
ENTRY(VMAXCSDZrr, VMAXCSDrr)
ENTRY(VMAXPDZ128rm, VMAXPDrm)
ENTRY(VMAXPDZ128rr, VMAXPDrr)
ENTRY(VMAXSDZrm_Int, VMAXSDrm_Int)
ENTRY(VMAXSDZrr_Int, VMAXSDrr_Int)
ENTRY(VMINCPDZ128rm, VMINCPDrm)
ENTRY(VMINCPDZ128rr, VMINCPDrr)
ENTRY(VMINCSDZrm, VMINCSDrm)
ENTRY(VMINCSDZrr, VMINCSDrr)
ENTRY(VMINPDZ128rm, VMINPDrm)
ENTRY(VMINPDZ128rr, VMINPDrr)
ENTRY(VMINSDZrm_Int, VMINSDrm_Int)
ENTRY(VMINSDZrr_Int, VMINSDrr_Int)
ENTRY(VMOVAPDZ128mr, VMOVAPDmr)
ENTRY(VMOVAPDZ128rm, VMOVAPDrm)
ENTRY(VMOVAPDZ128rr, VMOVAPDrr)
ENTRY(VMOVDDUPZ128rm, VMOVDDUPrm)
ENTRY(VMOVDDUPZ128rr, VMOVDDUPrr)
ENTRY(VMOVDQA64Z128mr, VMOVDQAmr)
ENTRY(VMOVDQA64Z128rm, VMOVDQArm)
ENTRY(VMOVDQA64Z128rr, VMOVDQArr)
ENTRY(VMOVDQU64Z128mr, VMOVDQUmr)
ENTRY(VMOVDQU64Z128rm, VMOVDQUrm)
ENTRY(VMOVDQU64Z128rr, VMOVDQUrr)
ENTRY(VMOVHPDZ128mr, VMOVHPDmr)
ENTRY(VMOVHPDZ128rm, VMOVHPDrm)
ENTRY(VMOVLPDZ128mr, VMOVLPDmr)
ENTRY(VMOVLPDZ128rm, VMOVLPDrm)
ENTRY(VMOVNTPDZ128mr, VMOVNTPDmr)
ENTRY(VMOVPQI2QIZmr, VMOVPQI2QImr)
ENTRY(VMOVPQI2QIZrr, VMOVPQI2QIrr)
ENTRY(VMOVQI2PQIZrm, VMOVQI2PQIrm)
ENTRY(VMOVSDZmr, VMOVSDmr)
ENTRY(VMOVSDZrm, VMOVSDrm)
ENTRY(VMOVSDZrm_alt, VMOVSDrm_alt)
ENTRY(VMOVSDZrr, VMOVSDrr)
ENTRY(VMOVUPDZ128mr, VMOVUPDmr)
ENTRY(VMOVUPDZ128rm, VMOVUPDrm)
ENTRY(VMOVUPDZ128rr, VMOVUPDrr)
ENTRY(VMOVZPQILo2PQIZrr, VMOVZPQILo2PQIrr)
ENTRY(VMULPDZ128rm, VMULPDrm)
ENTRY(VMULPDZ128rr, VMULPDrr)
ENTRY(VMULSDZrm, VMULSDrm)
ENTRY(VMULSDZrm_Int, VMULSDrm_Int)
ENTRY(VMULSDZrr, VMULSDrr)
ENTRY(VMULSDZrr_Int, VMULSDrr_Int)
ENTRY(VORPDZ128rm, VORPDrm)
ENTRY(VORPDZ128rr, VORPDrr)
ENTRY(VPADDQZ128rm, VPADDQrm)
ENTRY(VPADDQZ128rr, VPADDQrr)
ENTRY(VPANDNQZ128rm, VPANDNrm)
ENTRY(VPANDNQZ128rr, VPANDNrr)
ENTRY(VPANDQZ128rm, VPANDrm)
ENTRY(VPANDQZ128rr, VPANDrr)
ENTRY(VPERMILPDZ128mi, VPERMILPDmi)
ENTRY(VPERMILPDZ128ri, VPERMILPDri)
ENTRY(VPERMILPDZ128rm, VPERMILPDrm)
ENTRY(VPERMILPDZ128rr, VPERMILPDrr)
ENTRY(VPMULDQZ128rm, VPMULDQrm)
ENTRY(VPMULDQZ128rr, VPMULDQrr)
ENTRY(VPMULUDQZ128rm, VPMULUDQrm)
ENTRY(VPMULUDQZ128rr, VPMULUDQrr)
ENTRY(VPORQZ128rm, VPORrm)
ENTRY(VPORQZ128rr, VPORrr)
ENTRY(VPSLLQZ128ri, VPSLLQri)
ENTRY(VPSLLQZ128rm, VPSLLQrm)
ENTRY(VPSLLQZ128rr, VPSLLQrr)
ENTRY(VPSRLQZ128ri, VPSRLQri)
ENTRY(VPSRLQZ128rm, VPSRLQrm)
ENTRY(VPSRLQZ128rr, VPSRLQrr)
ENTRY(VPSUBQZ128rm, VPSUBQrm)
ENTRY(VPSUBQZ128rr, VPSUBQrr)
ENTRY(VPUNPCKHQDQZ128rm, VPUNPCKHQDQrm)
ENTRY(VPUNPCKHQDQZ128rr, VPUNPCKHQDQrr)
ENTRY(VPUNPCKLQDQZ128rm, VPUNPCKLQDQrm)
ENTRY(VPUNPCKLQDQZ128rr, VPUNPCKLQDQrr)
ENTRY(VPXORQZ128rm, VPXORrm)
ENTRY(VPXORQZ128rr, VPXORrr)
ENTRY(VRNDSCALEPDZ128rmi, VROUNDPDmi)
ENTRY(VRNDSCALEPDZ128rri, VROUNDPDri)
ENTRY(VRNDSCALESDZm, VROUNDSDmi)
ENTRY(VRNDSCALESDZm_Int, VROUNDSDmi_Int)
ENTRY(VRNDSCALESDZr, VROUNDSDri)
ENTRY(VRNDSCALESDZr_Int, VROUNDSDri_Int)
ENTRY(VSHUFPDZ128rmi, VSHUFPDrmi)
ENTRY(VSHUFPDZ128rri, VSHUFPDrri)
ENTRY(VSQRTPDZ128m, VSQRTPDm)
ENTRY(VSQRTPDZ128r, VSQRTPDr)
ENTRY(VSQRTSDZm, VSQRTSDm)
ENTRY(VSQRTSDZm_Int, VSQRTSDm_Int)
ENTRY(VSQRTSDZr, VSQRTSDr)
ENTRY(VSQRTSDZr_Int, VSQRTSDr_Int)
ENTRY(VSUBPDZ128rm, VSUBPDrm)
ENTRY(VSUBPDZ128rr, VSUBPDrr)
ENTRY(VSUBSDZrm, VSUBSDrm)
ENTRY(VSUBSDZrm_Int, VSUBSDrm_Int)
ENTRY(VSUBSDZrr, VSUBSDrr)
ENTRY(VSUBSDZrr_Int, VSUBSDrr_Int)
ENTRY(VUCOMISDZrm, VUCOMISDrm)
ENTRY(VUCOMISDZrm_Int, VUCOMISDrm_Int)
ENTRY(VUCOMISDZrr, VUCOMISDrr)
ENTRY(VUCOMISDZrr_Int, VUCOMISDrr_Int)
ENTRY(VUNPCKHPDZ128rm, VUNPCKHPDrm)
ENTRY(VUNPCKHPDZ128rr, VUNPCKHPDrr)
ENTRY(VUNPCKLPDZ128rm, VUNPCKLPDrm)
ENTRY(VUNPCKLPDZ128rr, VUNPCKLPDrr)
ENTRY(VXORPDZ128rm, VXORPDrm)
ENTRY(VXORPDZ128rr, VXORPDrr)
ENTRY(VADDPDZ256rm, VADDPDYrm)
ENTRY(VADDPDZ256rr, VADDPDYrr)
ENTRY(VANDNPDZ256rm, VANDNPDYrm)
ENTRY(VANDNPDZ256rr, VANDNPDYrr)
ENTRY(VANDPDZ256rm, VANDPDYrm)
ENTRY(VANDPDZ256rr, VANDPDYrr)
ENTRY(VCVTPD2DQZ256rm, VCVTPD2DQYrm)
ENTRY(VCVTPD2DQZ256rr, VCVTPD2DQYrr)
ENTRY(VCVTPD2PSZ256rm, VCVTPD2PSYrm)
ENTRY(VCVTPD2PSZ256rr, VCVTPD2PSYrr)
ENTRY(VCVTTPD2DQZ256rm, VCVTTPD2DQYrm)
ENTRY(VCVTTPD2DQZ256rr, VCVTTPD2DQYrr)
ENTRY(VDIVPDZ256rm, VDIVPDYrm)
ENTRY(VDIVPDZ256rr, VDIVPDYrr)
ENTRY(VEXTRACTF64x2Z256mr, VEXTRACTF128mr)
ENTRY(VEXTRACTF64x2Z256rr, VEXTRACTF128rr)
ENTRY(VEXTRACTI64x2Z256mr, VEXTRACTI128mr)
ENTRY(VEXTRACTI64x2Z256rr, VEXTRACTI128rr)
ENTRY(VINSERTF64x2Z256rm, VINSERTF128rm)
ENTRY(VINSERTF64x2Z256rr, VINSERTF128rr)
ENTRY(VINSERTI64x2Z256rm, VINSERTI128rm)
ENTRY(VINSERTI64x2Z256rr, VINSERTI128rr)
ENTRY(VMAXCPDZ256rm, VMAXCPDYrm)
ENTRY(VMAXCPDZ256rr, VMAXCPDYrr)
ENTRY(VMAXPDZ256rm, VMAXPDYrm)
ENTRY(VMAXPDZ256rr, VMAXPDYrr)
ENTRY(VMINCPDZ256rm, VMINCPDYrm)
ENTRY(VMINCPDZ256rr, VMINCPDYrr)
ENTRY(VMINPDZ256rm, VMINPDYrm)
ENTRY(VMINPDZ256rr, VMINPDYrr)
ENTRY(VMOVAPDZ256mr, VMOVAPDYmr)
ENTRY(VMOVAPDZ256rm, VMOVAPDYrm)
ENTRY(VMOVAPDZ256rr, VMOVAPDYrr)
ENTRY(VMOVDDUPZ256rm, VMOVDDUPYrm)
ENTRY(VMOVDDUPZ256rr, VMOVDDUPYrr)
ENTRY(VMOVDQA64Z256mr, VMOVDQAYmr)
ENTRY(VMOVDQA64Z256rm, VMOVDQAYrm)
ENTRY(VMOVDQA64Z256rr, VMOVDQAYrr)
ENTRY(VMOVDQU64Z256mr, VMOVDQUYmr)
ENTRY(VMOVDQU64Z256rm, VMOVDQUYrm)
ENTRY(VMOVDQU64Z256rr, VMOVDQUYrr)
ENTRY(VMOVNTPDZ256mr, VMOVNTPDYmr)
ENTRY(VMOVUPDZ256mr, VMOVUPDYmr)
ENTRY(VMOVUPDZ256rm, VMOVUPDYrm)
ENTRY(VMOVUPDZ256rr, VMOVUPDYrr)
ENTRY(VMULPDZ256rm, VMULPDYrm)
ENTRY(VMULPDZ256rr, VMULPDYrr)
ENTRY(VORPDZ256rm, VORPDYrm)
ENTRY(VORPDZ256rr, VORPDYrr)
ENTRY(VPADDQZ256rm, VPADDQYrm)
ENTRY(VPADDQZ256rr, VPADDQYrr)
ENTRY(VPANDNQZ256rm, VPANDNYrm)
ENTRY(VPANDNQZ256rr, VPANDNYrr)
ENTRY(VPANDQZ256rm, VPANDYrm)
ENTRY(VPANDQZ256rr, VPANDYrr)
ENTRY(VPERMILPDZ256mi, VPERMILPDYmi)
ENTRY(VPERMILPDZ256ri, VPERMILPDYri)
ENTRY(VPERMILPDZ256rm, VPERMILPDYrm)
ENTRY(VPERMILPDZ256rr, VPERMILPDYrr)
ENTRY(VPMULDQZ256rm, VPMULDQYrm)
ENTRY(VPMULDQZ256rr, VPMULDQYrr)
ENTRY(VPMULUDQZ256rm, VPMULUDQYrm)
ENTRY(VPMULUDQZ256rr, VPMULUDQYrr)
ENTRY(VPORQZ256rm, VPORYrm)
ENTRY(VPORQZ256rr, VPORYrr)
ENTRY(VPSLLQZ256ri, VPSLLQYri)
ENTRY(VPSLLQZ256rm, VPSLLQYrm)
ENTRY(VPSLLQZ256rr, VPSLLQYrr)
ENTRY(VPSRLQZ256ri, VPSRLQYri)
ENTRY(VPSRLQZ256rm, VPSRLQYrm)
ENTRY(VPSRLQZ256rr, VPSRLQYrr)
ENTRY(VPSUBQZ256rm, VPSUBQYrm)
ENTRY(VPSUBQZ256rr, VPSUBQYrr)
ENTRY(VPUNPCKHQDQZ256rm, VPUNPCKHQDQYrm)
ENTRY(VPUNPCKHQDQZ256rr, VPUNPCKHQDQYrr)
ENTRY(VPUNPCKLQDQZ256rm, VPUNPCKLQDQYrm)
ENTRY(VPUNPCKLQDQZ256rr, VPUNPCKLQDQYrr)
ENTRY(VPXORQZ256rm, VPXORYrm)
ENTRY(VPXORQZ256rr, VPXORYrr)
ENTRY(VRNDSCALEPDZ256rmi, VROUNDPDYmi)
ENTRY(VRNDSCALEPDZ256rri, VROUNDPDYri)
ENTRY(VSHUFPDZ256rmi, VSHUFPDYrmi)
ENTRY(VSHUFPDZ256rri, VSHUFPDYrri)
ENTRY(VSQRTPDZ256m, VSQRTPDYm)
ENTRY(VSQRTPDZ256r, VSQRTPDYr)
ENTRY(VSUBPDZ256rm, VSUBPDYrm)
ENTRY(VSUBPDZ256rr, VSUBPDYrr)
ENTRY(VUNPCKHPDZ256rm, VUNPCKHPDYrm)
ENTRY(VUNPCKHPDZ256rr, VUNPCKHPDYrr)
ENTRY(VUNPCKLPDZ256rm, VUNPCKLPDYrm)
ENTRY(VUNPCKLPDZ256rr, VUNPCKLPDYrr)
ENTRY(VXORPDZ256rm, VXORPDYrm)
ENTRY(VXORPDZ256rr, VXORPDYrr)
ENTRY(VPBROADCASTQZ128rm, VPBROADCASTQrm)
ENTRY(VPBROADCASTQZ128rr, VPBROADCASTQrr)
ENTRY(VBROADCASTF64X2Z128rm, VBROADCASTF128rm)
ENTRY(VBROADCASTI64X2Z128rm, VBROADCASTI128rm)
ENTRY(VBROADCASTSDZ256rm, VBROADCASTSDYrm)
ENTRY(VBROADCASTSDZ256rr, VBROADCASTSDYrr)
ENTRY(VPBROADCASTQZ256rm, VPBROADCASTQYrm)
ENTRY(VPBROADCASTQZ256rr, VPBROADCASTQYrr)
#undef ENTRY

#ifndef NOCOMP_ND
#define NOCOMP_ND(INSN)
#endif
// When condition evaluates to false, the destination register is zeroed for
// nonNDD CFCMOV but not for NDD CFCMOV.
NOCOMP_ND(CFCMOV16rm_ND)
NOCOMP_ND(CFCMOV16rr_ND)
NOCOMP_ND(CFCMOV32rm_ND)
NOCOMP_ND(CFCMOV32rr_ND)
NOCOMP_ND(CFCMOV64rm_ND)
NOCOMP_ND(CFCMOV64rr_ND)
#undef NOCOMP_ND

#ifndef ENTRY_ND
#define ENTRY_ND(OLD, NEW)
#endif
ENTRY_ND(MOVBE32rr, BSWAP32r)
ENTRY_ND(MOVBE64rr, BSWAP64r)
#undef ENTRY_ND

#ifndef ENTRY_SSE2AVX
#define ENTRY_SSE2AVX(OLD, NEW)
#endif
ENTRY_SSE2AVX(BLENDVPDrm0, VBLENDVPDrmr)
ENTRY_SSE2AVX(BLENDVPDrr0, VBLENDVPDrrr)
ENTRY_SSE2AVX(BLENDVPSrm0, VBLENDVPSrmr)
ENTRY_SSE2AVX(BLENDVPSrr0, VBLENDVPSrrr)
ENTRY_SSE2AVX(PBLENDVBrm0, VPBLENDVBrmr)
ENTRY_SSE2AVX(PBLENDVBrr0, VPBLENDVBrrr)
#undef ENTRY_SSE2AVX
